package TDALista;


import java.util.*;

/**
 * Clase ElementIterator
 * @author Ezequiel Antoine - LU:94166.
 */
public class ElementIterator<E> implements Iterator<E>
{
 protected PositionList<E> List;
 protected Position<E> cursor;
 
 /**
  * Crea un elemento iterador sobre la lista dada.
  * @param L Lista a iterar.
  */
 public ElementIterator(PositionList<E> L)
 {
	 List=L;
	 try{
		 if (List.isEmpty())
		 	{
			 	cursor=null;
			} 
		 else
			 cursor=List.first();
	
	 } catch (EmptyListException e) {System.out.println("Lista vacia");}
 }
 
 /**
  * @return True si tiene siguiente elemento, False en caso contrario. 
  */
 public boolean hasNext()
 {
	 return (cursor!=null);
 }
 	
/**
 * @return El elemento siguiente en la lista iterable.
 */
public E next() throws NoSuchElementException
{
	if (cursor==null) 
		throw new NoSuchElementException ("No hay elemento siguiente");
	
	E toReturn=null;
		
	try{
		toReturn=cursor.element();

		if (cursor==List.last())
			{
			cursor= null;
			} 
		 else
			 {
			 cursor= List.next(cursor);
			 }
		
	   }catch (InvalidPositionException | BoundaryViolationException | EmptyListException e1) {System.out.println("Error next element iterator");}

	return toReturn;

}


public void remove() {}

 
}